from django.shortcuts import render, HttpResponse, redirect
from web import models
from web.utils.pagination import Pagination

from web.utils.form import UserModelForm, PrettyModelForm, PrettyEditModelForm


def depart_list(request):
    """部门列表"""
    # 去数据库获取所有的部门信息
    queryset = models.Department.objects.all()
    return render(request, 'depart_list.html', {'queryset': queryset})


def depart_add(request):
    """新建部门"""
    if request.method == "GET":
        return render(request, 'depart_add.html')
    # 获取用户通过post提交过来的数据(title可能为空)
    title = request.POST.get("title")
    # 保存到数据库
    models.Department.objects.create(title=title)
    # 重定向回部门列表页面
    return redirect("/depart/list/")


def depart_delete(request):
    """删除部门"""
    # 获取要删除的部门id  http://127.0.0.1:8000/depart/delete/?nid=1
    nid = request.GET.get('nid')
    # 删除对应id的整行数据
    models.Department.objects.filter(id=nid).delete()
    # 重定向回部门列表页面
    return redirect("/depart/list/")


def depart_edit(request, nid):
    """修改部门"""
    if request.method == "GET":
        # 根据nid，获取它的数据,返回一个queryset ; .fist方法取其第一个对象
        row_object = models.Department.objects.filter(id=nid).first()
        return render(request, 'depart_edit.html', {'row_object': row_object})

    # 获取用户新输入的数据
    title = request.POST.get("title")
    # 根据ID找到数据库中的数据并进行更新
    models.Department.objects.filter(id=nid).update(title=title)
    # 更新完毕，重定向回部门列表页面
    return redirect("/depart/list/")


from django.core.files.uploadedfile import InMemoryUploadedFile


def depart_multi(request):
    """批量上传（Excel）"""
    from openpyxl import load_workbook
    # 1 获取用户上传的文件对象
    file_object = request.FILES.get('excel')
    # 2 文件对象传递给openpyxl，由 openpyxl 直接打开Excel并读取内容
    wb = load_workbook(file_object)
    sheet = wb.worksheets[0]

    # cell = sheet.cell(1, 1)
    # print(cell.value)
    # 3 循环获取每一行数据，第一行是标题，不取
    for row in sheet.iter_rows(min_row=2):
        text = row[0].value
        exists = models.Department.objects.filter(title=text).exists()  # 排除重名的部门
        if not exists:
            # 将部门写入数据库
            models.Department.objects.create(title=text)

    return redirect('/depart/list/')
